<?php

declare(strict_types=1);

namespace app\admin\controller\coupon;

use app\common\service\coupon\CouponSyncService;
use app\model\CouponBrandType;
use app\model\CouponProduct;
use app\admin\controller\Controller;
use app\Request;
use app\admin\validate\Coupon\Product as ProductValidate;

class Product extends Controller
{
    //商品列表
    public function goodsList(){
        $params = input();
        $data = CouponProduct::goodsList($params);
        return success('', $data);
    }

    //同步商品数据
    public function syncProduct(){
        $service = new CouponSyncService();
        $service->sync(CouponSyncService::CHANNEL_JUTUIKE);
        return success('同步成功');
    }

    /**
     * 面额列表
     * @method get
     * @params array $params
     * @returns string
     */
    public function list(Request $request)
    {
        $params = $request->param();
        if (empty($params['type_id'])) {
            return fail('充值类型id不能为空');
        }
        $list = (new CouponProduct())->productList($params);
        return success('操作成功', $list);
    }

    /**
     * 新增面额
     * @method post
     * @params array $params
     * returns
     */
    public function add(Request $request, ProductValidate $validate)
    {
        $params = $request->only(['name', 'type_id', 'status', 'sort', 'type' => CouponProduct::TYPE_QY]);
        $result = $validate->scene('add_product')->check($params);
        if(!$result) {
            return fail($validate->getError());
        }
        //判断品牌类型是否存在或者是否被删除
        $info = CouponBrandType::where('id', $params['type_id'])->findOrEmpty();
        if ($info->isEmpty()) {
            return fail('新增失败，充值类型不存在');
        }
        //判断充值类型是否已经存在
        $productModel = new CouponProduct();
        $check = $productModel->checkExists((int)$params['type_id'], trim($params['name']));
        if (!$check->isEmpty()) {
            return fail('新增失败，该充值类型下已存在'.$params['name']);
        }
        //判断排序是否存在
       /* $sort = $productModel->checkIsExistsSort($params['type_id'], $params['sort']);
        if (!$sort->isEmpty()) {
            return fail('新增失败，该面额下已存在序号'.$params['sort']);
        }*/
        $data = CouponProduct::create($params);
        return success('新增成功', ['id' => $data->id]);
    }

    /**
     * 修改充值类型
     * @method put
     * @params array $params
     * returns
     */
    public function edit(Request $request, ProductValidate $validate)
    {
        $params = $request->only(['id','name', 'type_id', 'status', 'sort']);
        $result = $validate->scene('edit_product')->check($params);
        if(!$result) {
            return fail($validate->getError());
        }
        //判断品牌类型是否存在或者是否被删除
        $info = CouponBrandType::where('id', $params['type_id'])->findOrEmpty();
        if ($info->isEmpty()) {
            return fail('修改失败，充值类型不存在');
        }
        //判断同一个品牌下是否存在同样的品牌类型
        $productModel = new CouponProduct();
        $check = $productModel->checkExists((int)$params['type_id'], trim($params['name']));
        if (!$check->isEmpty() && $check->id != $params['id']) {
            return fail('修改失败，该充值类型下已存在'.$params['name']);
        }
        //判断该条数据是否还存在
        $info = CouponProduct::where('id', $params['id'])->findOrEmpty();
        if ($info->isEmpty()) {
            return fail('修改失败，数据不存在');
        }
        //判断排序是否存在
        /*$sort = $productModel->checkIsExistsSort($params['type_id'], $params['sort']);
        if ((!$sort->isEmpty()) && $sort->id != $params['id']) {
            return fail('新增失败，该充值类型下已存在序号'.$params['sort']);
        }*/
        CouponProduct::update($params);
        return success('修改成功', ['id' => $params['id']]);
    }

    /**
     * 修改充值类型显示状态
     * @method PATCH
     * @params array $params
     * returns
     */
    public function status(Request $request, ProductValidate $validate)
    {
        $params = $request->only(['id','status']);
        $result = $validate->scene('set_status')->check($params);
        if(!$result) {
            return fail($validate->getError());
        }
        //判读是否存在
        $info = CouponProduct::where('id', $params['id'])->findOrEmpty();
        if ($info->isEmpty()) {
            return fail('充值类型不存在或已经被删除');
        }
        CouponProduct::update($params);
        return success('修改成功', ['id' =>$params['id']]);
    }

    /**
     * 删除
     * @method PATCH
     * @params int $id
     * returns
     */
    public function del(Request $request)
    {
        $id = $request->param('id');
        if (!is_numeric($id)) {
            return fail('参数错误');
        }
        //判读是否存在
        $info = CouponProduct::where('id', $id)->findOrEmpty();
        if ($info->isEmpty()) {
            return fail('充值类型不存在或已经被删除');
        }
        $info->delete();
        return success('删除成功', ['id' =>$id]);
    }





















}
